﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Web.Security;


using Intelsi.Entity;
using Intelsi.BusinessLogic;
using Microsoft.Practices.Unity;

namespace Intelsi.WB
{
    public partial class frmPedido : System.Web.UI.Page
    {
        [Dependency]
        public IProyectoBL proyectoBL { get; set; }
       
        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabajadorBL { get; set; }

        [Dependency]
        public IPedidoBL pedidoBL { get; set; }



        private const string VARPRODUCTO = "producto";
        private const string VARPEDIDO = "pedido";
        private const string VARPEDIDONUEVO = "nuevped";
        private const string VARPROYECTO = "proyecto";

        public bool EditarCantidad = true;


        protected void Page_Load(object sender, EventArgs e)
        {

            var acc = Request.QueryString["acc"];

            if (!Page.IsPostBack)
                {

                    string userName = HttpContext.Current.User.Identity.Name;
                    var trabajador1 = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);
                    string cargo = trabajador1.Cargo;

                    if (acc != string.Empty)
                    {
                        if (acc == "editar" && (cargo == "Supervisor" || cargo == "Gerente"))
                        {
                            var IdPedido = Int32.Parse(Request.QueryString["IdPedido"]);
                            var pedido = pedidoBL.GetfromPedidoByIdPedido(IdPedido);
                            EditarCantidad = true;
                            BindPedido(pedido);
                           // Updatecache(pedido);

                            TxtFechaPedido.Enabled = false;
                            txtFechaentrega.Visible = false;

                            TxtDesPro.Enabled = false;
                            TxtEmpresa.Enabled = false;
                            TxtOrdeser.Enabled = false;

                            TxtNombSup.Enabled = false;
                            TxtDniSup.Enabled = false;
                            TxtNumeFotoEmpl.Enabled = false;
                            TxtCeluEmpre.Enabled = false;


                            TxtDescProdu.Enabled = true;
                            TxtCodProd.Enabled = false;
                            TxtMarca.Enabled = false;

                            panelaprobador.Visible = false;
                            panelAlmacenero.Visible = false;

                            btnGuardar.Text = "Guardar Cambios";
                            btnAgregar2.Visible = false;
                        }

                         else if (acc == "nuevo" &&(cargo == "Supervisor" || cargo == "Gerente"))
                        {
                            var Pedido = new PedidoDTO();
                            EditarCantidad = true;
                            BindNuevoPedido(Pedido);
                            
                            btnGuardar.Text = "Registar";
                            BtnAgregar.Visible = false;
                            txtFechaentrega.Visible = false;
                            panelaprobador.Visible = false;
                            panelAlmacenero.Visible = false;
                        }

                         else if (acc == "aprobar" && (cargo == "Gerente" || cargo == "Gerente"))
                        {
                            var IdPedido = Int32.Parse(Request.QueryString["IdPedido"]);
                            var pedido = pedidoBL.GetfromPedidoByIdPedido(IdPedido);
                            EditarCantidad = false;
                            BindAproPedido(pedido);

                            txtFechaentrega.Visible = false;
                            btnGuardar.Text = "Aprobar";
                            TxtFechaPedido.Enabled = false;
                            TxtNombSup.Enabled = false;
                            TxtDniSup.Enabled = false;
                            TxtNumeFotoEmpl.Enabled = false;
                            TxtCeluEmpre.Enabled = false;
                            TxtDesPro.Enabled = false;
                            TxtEmpresa.Enabled = false;
                            TxtOrdeser.Enabled = false;
                            txtNombAprob.Enabled = false;
                            txtCeluAprob.Enabled = false;
                            txtfotocAprob.Enabled = false;
                            txtDniAprob.Enabled = false;
                            
                            GrillaPedido.Columns[5].Visible = false;

                            BtnAgregar.Visible = false;
                            btnAgregar2.Visible = false;

                            panelproducto.Visible = false;
                            panelAlmacenero.Visible = false;
                            
                        }

                        else if (acc == "entregar" && (cargo == "Almacenero"))
                        {
                            var IdPedido = Int32.Parse(Request.QueryString["IdPedido"]);
                            var pedido = pedidoBL.GetFromPedidoByIdPedidoII(IdPedido);
                            EditarCantidad = false;
                            BindEntregarPedido(pedido);

                            txtFechaentrega.Visible = true;
                            txtFechaentrega.Text = DateTime.Now.ToShortDateString();

                            btnGuardar.Text = "Entregar";
                            TxtFechaPedido.Enabled = false;
                            TxtNombSup.Enabled = false;
                            TxtDniSup.Enabled = false;
                            TxtNumeFotoEmpl.Enabled = false;
                            TxtCeluEmpre.Enabled = false;
                            TxtDesPro.Enabled = false;
                            TxtEmpresa.Enabled = false;
                            TxtOrdeser.Enabled = false;
                            txtNombAprob.Enabled = false;
                            txtCeluAprob.Enabled = false;
                            txtfotocAprob.Enabled = false;
                            txtDniAprob.Enabled = false;

                            GrillaPedido.Columns[5].Visible = false;

                            BtnAgregar.Visible = false;
                            btnAgregar2.Visible = false;

                            panelproducto.Visible = false;

                        }


                        else if (acc == "VerEntrega" && (cargo == "Almacenero" || cargo == "Gerente"))
                        {
                            var IdPedido = Int32.Parse(Request.QueryString["IdPedido"]);
                            var pedido = pedidoBL.GetFromPedidoByIdPedidoIII(IdPedido);
                            EditarCantidad = false;
                            BindVerPedido(pedido);

                            txtFechaentrega.Visible = true;
                            // txtFechaentrega.Text = DateTime.Now.ToShortDateString();

                            btnGuardar.Visible = false;
                            TxtFechaPedido.Enabled = false;
                            TxtNombSup.Enabled = false;
                            TxtDniSup.Enabled = false;
                            TxtNumeFotoEmpl.Enabled = false;
                            TxtCeluEmpre.Enabled = false;
                            TxtDesPro.Enabled = false;
                            TxtEmpresa.Enabled = false;
                            TxtOrdeser.Enabled = false;
                            txtNombAprob.Enabled = false;
                            txtCeluAprob.Enabled = false;
                            txtfotocAprob.Enabled = false;
                            txtDniAprob.Enabled = false;

                            GrillaPedido.Columns[5].Visible = false;

                            BtnAgregar.Visible = false;
                            btnAgregar2.Visible = false;

                            panelproducto.Visible = false;

                        }

                        else
                        {
                            Page.ClientScript.RegisterStartupScript(this.GetType(),
                              "mensaje",
                                 "<script type=\"text/javascript\">" +
                                    "alert(\"Usted No tiene Los Permiso Nesesarios Para esto\");" +
                                    "document.location=('Default.aspx');" +
                                      "</script>", false);
                        }

                    }
                }           
        }

         private void CargaMemoryProducto()
        {
            var producto = new DetallePedidoDTO();

            hfIdProducto.Value = producto.IdProducto.ToString();
            TxtDescProdu.Text = producto.Descripcion;
            TxtCodProd.Text = producto.Codigo;
            TxtMarca.Text = producto.NombreMarca;

            Cache.Insert(VARPRODUCTO, producto);
            
        }


        protected void BtnAgregar_Click(object sender, EventArgs e)
        {
            CargarMemoryProdutos();

            
            var pedido = Cache.Get(VARPEDIDO) as PedidoDTO;
            var producto = Cache.Get(VARPRODUCTO) as DetallePedidoDTO;

            var cantidad = decimal.Parse(TxtCantidad.Text);
            bool exist;

            if (TxtCodProd.Text == null)
            {
                exist = false;
            }
            else
            {
                exist = true;
            }

            var existencia = exist;



            var query = from p in pedido.DetallePedido
                        where p.IdProducto.Equals(Int32.Parse(hfIdProducto.Value))
                        select p;


            if (query.SingleOrDefault() != null)
            {
                labelAlerta.Text = "El Producto ya se encuentra en la lista en los proximos dias corrigiremos eso";
            }
            else
            {
                DetallePedidoDTO newdetalle = new DetallePedidoDTO()
                {
                    IdProducto = producto.IdProducto,
                    Codigo = producto.Codigo,
                    Descripcion = producto.Descripcion,
                    NombreMarca = producto.NombreMarca,
                    Cantidad = cantidad,
                    Existencia = existencia

                };

                // var pedido = Cache.Get(VARPEDIDO) as PedidoDTO;
                pedido.DetallePedido.Add(newdetalle);
                Cache.Insert(VARPEDIDO, pedido);
                BindPedido(pedido);


                labelAlerta.Text = "";

            }

        }


        private void CargarMemoryProdutos()
        {
            var producto1 = new DetallePedidoDTO();
            //Revisa la version anterior esto las puesto al revez...
            //IDProducto = producto1.IdProducto ;
            producto1.IdProducto = Int32.Parse(hfIdProducto.Value);
            producto1.Descripcion = TxtDescProdu.Text;
            producto1.Codigo = TxtCodProd.Text;
            producto1.NombreMarca = TxtMarca.Text;

            TxtDescProdu.Enabled = true;
            TxtCodProd.Enabled = false;
            TxtMarca.Enabled = false;

            Cache.Insert(VARPRODUCTO, producto1);
        }


        private void BindPedido(PedidoDTO pedido2)
        {
            TxtNumPedi.Text = pedido2.IdPedido.ToString();
            TxtFechaPedido.Text = pedido2.FechaPedio.ToShortDateString();

            hfIdTrabajador.Value = pedido2.IdSupervisor.ToString();
            TxtDniSup.Text = pedido2.dniSuper;
            TxtNombSup.Text = pedido2.NombreSuper;
            TxtNumeFotoEmpl.Text = pedido2.numFotochSuper;
            TxtCeluEmpre.Text = pedido2.celularSuper;

            hfIdProyecto.Value = pedido2.IdProyecto.ToString();
            TxtDesPro.Text = pedido2.Descripcion;
            TxtOrdeser.Text = pedido2.ordenServicio;
            TxtEmpresa.Text = pedido2.empresa;

            GrillaPedido.DataSource = pedido2.DetallePedido;
            GrillaPedido.DataBind();
            

            Cache.Insert(VARPEDIDO, pedido2);
        }

        private void BindAproPedido(PedidoDTO pedido3)
        {
            string userName = HttpContext.Current.User.Identity.Name;
            var trabajador = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);

            TxtNumPedi.Text = pedido3.IdPedido.ToString();
            TxtFechaPedido.Text = pedido3.FechaPedio.ToShortDateString();


            
            hfIdAprobador.Value = trabajador.IdTrabajador.ToString();
            txtNombAprob.Text = trabajador.Ape_Nomb;
            txtDniAprob.Text = trabajador.DNI;
            txtfotocAprob.Text = trabajador.NumFotocheck;
            txtCeluAprob.Text = trabajador.Celular;

            pedido3.IdAprobador = Int32.Parse(hfIdAprobador.Value);
            pedido3.NombreAprob = txtNombAprob.Text;
            pedido3.dniAprob = txtDniAprob.Text;
            pedido3.numFotochAprob = txtfotocAprob.Text;
            pedido3.celularAprob = txtCeluAprob.Text;
            
            TxtDniSup.Text = pedido3.dniSuper;
            TxtNombSup.Text = pedido3.NombreSuper;
            TxtNumeFotoEmpl.Text = pedido3.numFotochSuper;
            TxtCeluEmpre.Text = pedido3.celularSuper;

            hfIdProyecto.Value = pedido3.IdProyecto.ToString();
            TxtDesPro.Text = pedido3.Descripcion;
            TxtOrdeser.Text = pedido3.ordenServicio;
            TxtEmpresa.Text = pedido3.empresa;

            GrillaPedido.DataSource = pedido3.DetallePedido;
            GrillaPedido.DataBind();

            Cache.Insert(VARPEDIDO, pedido3);
        }




        private void BindEntregarPedido(PedidoDTO pedido3)
        {
            string userName = HttpContext.Current.User.Identity.Name;
            var trabajador = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);

            TxtNumPedi.Text = pedido3.IdPedido.ToString();
            TxtFechaPedido.Text = pedido3.FechaPedio.ToShortDateString();


            hfidalma.Value = trabajador.IdTrabajador.ToString();
            txtnombrealama.Text = trabajador.Ape_Nomb;
            txtDnialama.Text = trabajador.DNI;
            txtNumerFotocAlma.Text = trabajador.NumFotocheck;
            txtcelularalama.Text = trabajador.NumFotocheck;


          //  txtFechaentrega.Text = pedido3.FechaEntregaPedido.ToShortDateString();
            pedido3.FechaEntregaPedido = TxtEmpresa.Text != "" ? DateTime.Parse(txtFechaentrega.Text) : DateTime.Now;


            pedido3.IdAlmacenero = Int32.Parse(hfidalma.Value);
            pedido3.NombreAlmac = txtnombrealama.Text;
            pedido3.dniEntre = txtDnialama.Text;
            pedido3.numFotochEntre = txtNumerFotocAlma.Text;
            pedido3.celularEntre = txtcelularalama.Text;

            hfIdAprobador.Value = pedido3.IdAprobador.ToString();
            txtNombAprob.Text = pedido3.NombreAprob;
            txtDniAprob.Text = pedido3.dniAprob;
            txtfotocAprob.Text = pedido3.numFotochAprob;
            txtCeluAprob.Text = pedido3.celularAprob;

            hfIdTrabajador.Value = pedido3.IdSupervisor.ToString();
            TxtDniSup.Text = pedido3.dniSuper;
            TxtNombSup.Text = pedido3.NombreSuper;
            TxtNumeFotoEmpl.Text = pedido3.numFotochSuper;
            TxtCeluEmpre.Text = pedido3.celularSuper;

            hfIdProyecto.Value = pedido3.IdProyecto.ToString();
            TxtDesPro.Text = pedido3.Descripcion;
            TxtOrdeser.Text = pedido3.ordenServicio;
            TxtEmpresa.Text = pedido3.empresa;

            GrillaPedido.DataSource = pedido3.DetallePedido;
            GrillaPedido.DataBind();

            Cache.Insert(VARPEDIDO, pedido3);
        }


        protected void btnGuardar_Click(object sender, EventArgs e)
        {

            if (btnGuardar.Text == "Guardar Cambios")
            {
                var pedido = Cache.Get("pedido") as PedidoDTO;
               //Updatecache(pedido);
                 

                try
                {
                    //PedidoBL.RegistrarPedido(pedido);
                    pedidoBL.RegistarPedido(pedido);
                    Response.Redirect("FrmListarPedidos.aspx");
                }
                catch (Exception)
                {

                    throw;
                }


            }

            else if (btnGuardar.Text == "Registar")
            {
                var pedido = Cache.Get("nuevped") as PedidoDTO;

                //Updatecache(pedido);

                try
                {
                    //PedidoBL.RegistrarPedido(pedido);
                    pedidoBL.RegistarPedido(pedido);
                    Response.Redirect("FrmListarPedidos.aspx");
                }
                catch (Exception)
                {

                    throw;
                }

            }
            else if (btnGuardar.Text == "Aprobar")
            {
                var pedido = Cache.Get("pedido") as PedidoDTO;
                BindAproPedido(pedido);
                try
                {
                    pedidoBL.AprobarPedido(pedido);
                    Response.Redirect("FrmListarPedidos.aspx");
                }
                catch (Exception)
                {
                    throw;
                }
            }

            else if (btnGuardar.Text == "Entregar")
            {
                var pedido = Cache.Get("pedido") as PedidoDTO;
                BindEntregarPedido(pedido);

                try
                {
                    pedidoBL.EntregarPedido(pedido);
                    Response.Redirect("FrmListarPedidos.aspx");
                }
                catch (Exception)
                {
                    
                    throw;
                }

            }

        }

        private void BindNuevoPedido(PedidoDTO pedido)
        {
            string userName = HttpContext.Current.User.Identity.Name;
            var trabajador = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);
            pedido.IdPedido = 0;
            pedido.FechaPedio = DateTime.Now;

            TxtNumPedi.Text = pedido.IdPedido.ToString();
            TxtFechaPedido.Text = pedido.FechaPedio.ToShortDateString();

            hfIdTrabajador.Value = trabajador.IdTrabajador.ToString();
            TxtNombSup.Text = trabajador.Ape_Nomb;
            TxtDniSup.Text = trabajador.DNI;
            TxtNumeFotoEmpl.Text = trabajador.NumFotocheck;
            TxtCeluEmpre.Text = trabajador.Celular;

            pedido.IdSupervisor = Int32.Parse(hfIdTrabajador.Value);
            pedido.NombreSuper = TxtNombSup.Text;
            pedido.dniSuper = TxtDniSup.Text;
            pedido.numFotochSuper = TxtNumeFotoEmpl.Text;
            pedido.celularSuper = TxtCeluEmpre.Text;

           

            TxtFechaPedido.Enabled = false;
            TxtFechaPedido.Enabled = false;

            TxtDesPro.Enabled = true;
            TxtEmpresa.Enabled = false;
            TxtOrdeser.Enabled = false;

            TxtNombSup.Enabled = false;
            TxtDniSup.Enabled = false;
            TxtNumeFotoEmpl.Enabled = false;
            TxtCeluEmpre.Enabled = false;

            GrillaPedido.DataSource = pedido.DetallePedido;
            GrillaPedido.DataBind();

            Cache.Insert(VARPEDIDONUEVO, pedido);

        }

        private void CargarProyectoinMemory()
        {
            var proyecto = Cache.Get(VARPEDIDONUEVO) as PedidoDTO;
            proyecto.IdProyecto = Int32.Parse(hfIdProyecto.Value);
            proyecto.Descripcion = TxtDesPro.Text;
            proyecto.ordenServicio = TxtOrdeser.Text;
            proyecto.empresa = TxtEmpresa.Text;

            Cache.Insert(VARPEDIDONUEVO, proyecto);
        }

        protected void btnAgregar2_Click(object sender, EventArgs e)
        {
            CargarProyectoinMemory();
            CargarMemoryProdutos();
            var pedido = Cache.Get(VARPEDIDONUEVO) as PedidoDTO;
            var producto = Cache.Get(VARPRODUCTO) as DetallePedidoDTO;

            var cantidad = decimal.Parse(TxtCantidad.Text);
            bool exist;

            if (TxtCodProd.Text == null)
            {
                exist = false;
            }
            else
            {
                exist = true;
            }

            var existencia = exist;

            DetallePedidoDTO newdetalle = new DetallePedidoDTO()
            {
                IdProducto = producto.IdProducto,
                Codigo = producto.Codigo,
                Descripcion = producto.Descripcion,
                NombreMarca = producto.NombreMarca,
                Cantidad = cantidad,
                Existencia = existencia

            };


            pedido.DetallePedido.Add(newdetalle);

            Cache.Insert(VARPEDIDONUEVO, pedido);
            BindNuevoPedido(pedido);

        }

        protected void GrillaPedido_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            {
                if (e.CommandName == "Quitar")
                {
                    var arg = Int32.Parse(e.CommandArgument.ToString());
                    var pedido = Cache.Get(VARPEDIDO) as PedidoDTO;

                    
                    
                        var detalle = (from p in pedido.DetallePedido
                                       where p.IdProducto.Equals(arg)
                                       select p).SingleOrDefault();

                        if (detalle.Item == 0)
                        {
                            pedido.DetallePedido.Remove(detalle);
                        }
                        else
                        { 
                            
                        }
                    
                    
                        
                       
                    }

                }
            

        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("FrmListarPedidos.aspx");
        }


        private void BindVerPedido(PedidoDTO pedido3)
        {
            

            TxtNumPedi.Text = pedido3.IdPedido.ToString();
            TxtFechaPedido.Text = pedido3.FechaPedio.ToShortDateString();


            hfidalma.Value = pedido3.IdAlmacenero.ToString();
            txtnombrealama.Text = pedido3.NombreAlmac;
            txtDnialama.Text = pedido3.dniEntre;
            txtNumerFotocAlma.Text = pedido3.numFotochEntre;
            txtcelularalama.Text = pedido3.celularEntre;


            //DateTime fechaentrega = pedido3.FechaEntregaPedido;
             txtFechaentrega.Text = pedido3.FechaEntregaPedido.ToString();
            //pedido3.FechaEntregaPedido = TxtEmpresa.Text != "" ? DateTime.Parse(txtFechaentrega.Text) : DateTime.Now;


            pedido3.IdAlmacenero = Int32.Parse(hfidalma.Value);
            pedido3.NombreAlmac = txtnombrealama.Text;
            pedido3.dniEntre = txtDnialama.Text;
            pedido3.numFotochEntre = txtNumerFotocAlma.Text;
            pedido3.celularEntre = txtcelularalama.Text;

            hfIdAprobador.Value = pedido3.IdAprobador.ToString();
            txtNombAprob.Text = pedido3.NombreAprob;
            txtDniAprob.Text = pedido3.dniAprob;
            txtfotocAprob.Text = pedido3.numFotochAprob;
            txtCeluAprob.Text = pedido3.celularAprob;

            hfIdTrabajador.Value = pedido3.IdSupervisor.ToString();
            TxtDniSup.Text = pedido3.dniSuper;
            TxtNombSup.Text = pedido3.NombreSuper;
            TxtNumeFotoEmpl.Text = pedido3.numFotochSuper;
            TxtCeluEmpre.Text = pedido3.celularSuper;

            hfIdProyecto.Value = pedido3.IdProyecto.ToString();
            TxtDesPro.Text = pedido3.Descripcion;
            TxtOrdeser.Text = pedido3.ordenServicio;
            TxtEmpresa.Text = pedido3.empresa;

            GrillaPedido.DataSource = pedido3.DetallePedido;
            GrillaPedido.DataBind();

            Cache.Insert(VARPEDIDO, pedido3);
        }

        protected void btnReporte_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/REPORTES/frmReportePedido.aspx?IdPedido=" + TxtNumPedi.Text);
        }


        //private void Updatecache(PedidoDTO pedido)

        //{

        //    var pedi = Cache.Get(VARPEDIDO) as PedidoDTO;



        //    pedi.IdPedido = pedido.IdPedido;
        //    pedi.FechaPedio = pedido.FechaPedio;
        //    pedi.IdSupervisor = pedi.IdSupervisor;
        //    pedi.IdProyecto = pedi.IdProyecto;
        //   // pedido.IdPedido = Int32.Parse(TxtNumPedi.Text);
        //    //pedido.FechaPedio = DateTime.Parse(TxtFechaPedido.Text);
        //    //pedido.IdSupervisor = Int32.Parse(hfIdTrabajador.Value);
        //    //pedido.IdProyecto = Int32.Parse(hfIdProyecto.Value);

        //    foreach (GridViewRow item in GrillaPedido.Rows)
        //    {
        //        var Nuewvaca = item.FindControl("txtcantidad") as TextBox;
        //        pedi.DetallePedido[item.RowIndex].Cantidad = decimal.Parse(Nuewvaca.Text);
        //    }

        //    Cache.Insert(VARPEDIDO, pedi);

        //    BindPedido(pedi);
        //    BindNuevoPedido(pedido);

        //}


    }
}